#include<unistd.h>
#include <sys/types.h>
#include <unistd.h>

#include<stdio.h>
#include<stdlib.h>

int g_val=100;

int main()
{
    pid_t id = fork();
    if(id<0)
    {
        return 1;
    }
    else if(id ==0)
    {
        //child
        int cnt=5;
        while(1)
        {
            printf("child,pid:%d,Ppid:%d,g_val:%d,&g_val:%p\n",getpid(),getppid(),g_val,&g_val);
            sleep(1);
            if(cnt==0)
            {
                g_val=200;
                printf("child change g_val: 100->200\n");
            }
            cnt--;
        }
    }
    else 
    {
        //parent
        while(1)
        {
            printf("parent,pid:%d,Ppid:%d,g_val:%d,&g_val:%p\n",getpid(),getppid(),g_val,&g_val);
            sleep(1);
        }    

    }
       
    sleep(100);
    return 0;
}


//int init_gval=100;
//int un_gval;
//
//int main()
//{
//    printf("code addr:%p\n",main);
//    char*str="Hello Linux";
//    printf("read only str addr:%p\n",str); 
//    printf("init global value addr: %p\n", &init_gval);
//    printf("uninit global value addr: %p\n", &un_gval);
//    int* heap = (int*)malloc(sizeof(int)*10);
//    int stack[10]={0};
//    int i =0;
//    for(;i<10;i++)
//    {
//        printf("stack[%d]:%p\n",i,stack+i);
//    }
//    for(i=0;i<10;i++)
//    {
//        printf("heap[%d]:%p\n",i,heap+i);
//    }
//    //char* heap1=(char*)malloc(100);
//    //char* heap2=(char*)malloc(100);
//    //char* heap3=(char*)malloc(100);
//    //char* heap4=(char*)malloc(100);
//    //char* heap5=(char*)malloc(100);
//    //printf("heap1 addr:%p\n",heap1);
//    //printf("heap2 addr:%p\n",heap2);
//    //printf("heap3 addr:%p\n",heap3);
//    //printf("heap4 addr:%p\n",heap4);
//    //printf("heap5 addr:%p\n",heap5);
//
//    //int stack1 =0;
//    //int stack2 =0;
//    //int stack3 =0;
//    //int stack4 =0;
//    //int stack5 =0;
//    //printf("stack1 addr:%p\n",&stack1);
//    //printf("stack2 addr:%p\n",&stack2);
//    //printf("stack3 addr:%p\n",&stack3);
//    //printf("stack4 addr:%p\n",&stack4);
//    //printf("stack5 addr:%p\n",&stack5);
//    return 0;
//
//}
